CD-Check remove Tutor 04



  • Programm: Age Of Empires 2
  • Protection: CD-Check / C-Dilla
  • Ziel: Ohne CD spielen

  • Autor: |VerTex|
  • Datum: 09.01.2000
  • Email: VerTex.TGC@gmx.net


  • Inhalt

  • 1. Einleitung
  • 2. Tools
  • 3. Tutor
  • 4. Sonstiges



  • Einleitung

    Hallo Leute!
    Dies hier wird mein erstes Tutor über C-Dilla cracking. Aber keine Angst ich gebe mir Mühe. Es ist ein wenig schwerer C-Dilla geschützte Spiele zu cracken aber nicht so schwer wie ich erst dachte! Man braucht zwar ein paar tools, aber mehr dazu später. Man erkennt C-Dilla geschützte Spiele daran:
  • 1. ...wenn man das Spiel dissamssebled und dann in den String References "Cdilla" vorfindet
  • 2. ...wenn die Spieldatei.exe ziemlich klein ist (kleiner als 400kb, [aber nicht immer])
  • 3. ...wenn es auf der CD oder im Verzeichnis auf der Festplatte eine Datei Namens Spieldatei.icd gibt
  • Das sind die auffälligsten Erkennungsmerkmale. Um eine gebrannte Version spielen zu können braucht man einen 1:1 Kopie des Spiels, was aber kaum möglich ist.



    Tools

  • 1. Wir brauchen eine Maximale Installation von "Age Of Empires 2" (die Videos kann man später löschen)
  • 2. Win32DASM
  • 3. SoftIce
  • 4. C.u.Dilla R1
  • 5. Einen Hex Editor




  • Tutor

    Nun wollen wir das Spiel cracken (so das man es ohne CD spielen kann).
  • 1. Wir machen eine "Maximal Installation" von "Age of Empires 2" und können danach die Videos auf der Festplatte löschen. (Wir sparen ca. 60MB)

  • 2. Wir Starten "C.u.Dilla R1" und gehen auf "Unwrap Game". Wir nehmen die Datei "Empires.icd". Achtung: Wir brauchen die Original CD im Laufwerk und SoftIce darf nicht geladen sein! Nach ein paar Sekunden, dürfte das Spiel starten und auch sofort wieder beendet sein. Wenn alles geklappt hat, wurde im "Age Of Empires 2" Verzeichnis eine Datei namens Unwrapped.exe erstellt, die ca. 2,5MB hat. Dies ist die entpackte Startdatei und wir können nun C.u.Dilla wieder beenden.Wenn man die Datei jetzt startet, kommt man ins Spiel, aber wenn man spielen möchte, kommt immer noch ein Fenster worin steht "Sie müssen eine Spiel CD einlegen,...". Wie gemerkt wird die Meldung mit Hilfe einer Grafik dargestellt (keine MessageBoxA), was uns das cracken natürlich erschwert. Also müssen wir von Anfang an nach dem GetDriveTypeA Call suchen. Leider ist das In Win32DASM fast unmöglich, denn es stehen die API's nicht im ASM Text, das uns die ganze Sache natürlich nochmals erschwert, aber dafür benutzen wir dann SoftIce... Siehe:
    * Reference To: KERNEL32.KERNEL32.dll, Ord:0000h

  • 3. Um SoftIce benutzen zu können müssen wir den Computer nochmals mit SoftIce hochbooten. Wenn das dann getan ist, können wir die "Unwrapped.exe" nochmals starten. Jetzt sind wir im Hauptmenü und wir versuchen mal das Einzelspiel zu starten. Schon wieder diese Meldung: "Sie müssen eine Spiel CD...". Jetzt gehen wir mit "Strg+D" in SoftIce und geben folgendes ein: "bpx GetDriveTypeA" und danach drücken wir . Das "bpx" steht für "Breakpoint on execute" und danach steht die API Funktion. Also soll das Programm anhalten, wenn GetDriveTypeA ausgeführt wird...
    Wir schliessen jetzt wieder mit "Strg+D" SoftIce und sind wieder im Spiel. Wenn wir jetzt auf "Einzelspieler" klicken, sind wir plötzlich wieder in SoftIce. Da steht jetzt was ähnliches wie: "Break due ... GetDriveTypeA". Drücken wir jetzt "F11" um zu sehen wo der GetDriveTypeA Call im ASM Text steht, und wir sehen (oben markiert) die Zeile mit der Adresse 0041F18A. Das ist nun Die Stelle wo die GetDriveTypeA Prozedur steht. Jetzt nur noch notieren, dann mit "bp*" alle breakpoints ausschalten und mit "Strg+D" SoftIce beenden. Das Spiel beenden und gegebenfalls neu (ohne SoftIce) hochbooten.

  • 4. Wir starten Win32Dasm und disassembeln die "Unwrapped.exe" Datei. Nun gehen wir im ASM Text zur "Code Location" die wir uns aufgeschrieben haben (0041F18A) und sehen folgendes:
    ...
    * Referenced by a (U)nconditional or (C)onditional Jump at Address:
    |:0041F176(C)                                      <- Von der Stelle wird die Proz. aufgerufen!
    |
    :0041F183 56                      push esi
    
    * Reference To: KERNEL32.KERNEL32.dll, Ord:0000h           <- GetDriveTypeA!!!
                                      |
    :0041F184 FF159CC16100            Call dword ptr [0061C19C]
    :0041F18A 83F805                  cmp eax, 00000005        <- Die Code Stelle!!!
    :0041F18D 740D                    je 0041F19C
    :0041F18F 5E                      pop esi
    :0041F190 33C0                    xor eax, eax
    :0041F192 5B                      pop ebx
    :0041F193 81C40C020000            add esp, 0000020C
    :0041F199 C20400                  ret 0004
    ...
    
    Da haben wir es doch schon. Unser GetDriveTypeA Call der für die Nachricht ("Sie müssen...") verantwortlich ist. Wieso GetDriveTypeA? - Man erkennt dies daran, dass es ein "Kernel32 Call" ist und das es irgendetwas mit "cmp eax, 00000005" zu tun hat, was man meisst mit dem GetDriveTypeA in Verbindung bringen kann.
    Was jetzt zu tun ist, dürfte wohl jedem klar sein, der schon mal was in der richtung gecrackt hat. Falls nicht, ist hier noch mal die Beschreibung:
    Wir wollen versuchen, dass diese Prozedur nicht mehr aufgerufen wird. Also schauen wir nach, von wo die Prozedur aufgerufen wird. Es ist die Adresse 0041F176. Was verbirgt sich dahinter??
    ...
    * Possible StringData Ref from Data Obj ->"CDPath"
                                      |
    :0041F166 683CD86400              push 0064D83C
    :0041F16B 6A00                    push 00000000
    :0041F16D E89EEE0900              call 004BE010
    :0041F172 8BF0                    mov esi, eax
    :0041F174 85F6                    test esi, esi
    :0041F176 750B                    jne 0041F183      <- Dieser Jump ruft die CD-Check Routine
    :0041F178 5E                      pop esi
    :0041F179 5B                      pop ebx
    :0041F17A 81C40C020000            add esp, 0000020C
    :0041F180 C20400                  ret 0004
    ...
    
    Was machen wir denn da? Natürlich, wir noppen den call (nop = NO OPERATION) was schon alles sagt. Was würde dann passieren? Das Programm läuft durch und anstatt nach der CD zu prüfen und die Fehler Meldung anzugeben, springt er überhaupt nicht zu der Routine, denn im Code fehlt die Aufforderrung die Prozedur zu starten. Also macht er einfach weiter und Startet das Spiel.
    Der Code sieht dann wie folgt aus:
    ...
    :0041F16D E89EEE0900              call 004BE010
    :0041F172 8BF0                    mov esi, eax
    :0041F174 85F6                    test esi, esi
    :0041F176 90                      nop             <- NO OPERATION
    :0041F177 90                      nop             <- NO OPERATION
    :0041F178 5E                      pop esi
    :0041F179 5B                      pop ebx
    :0041F17A 81C40C020000            add esp, 0000020C
    ...
    

  • 5. Jetzt brauchen wir nur noch die Adresse aufzuschreiben in diesem Fall (bei mir) 1F176 hex. wir schreiben uns ebenfalls die Hex Daten auf: 75 0B hex und die neuen (gecrackten): 90 90 hex.
    Nur noch einen Hex Editor starten und zu der Stelle 1F176 hex gehen und 75 0B hex mit 90 90 hex umschreiben (aber vorher Win32Dasm schliessen). Jetzt haben wir eine gecrackte Startdatei von "Age Of Empires 2" und wir können das Spiel jederzeit ohne CD starten, damit die CD keine Kratzer bekommt. ;)




  • Sonstige

    Das Tutor ist schon wieder zu Ende. Wenn ihr euch jetzt denkt "Schade" dann hat dieses Tutor seinen Zweck erfüllt: 1. Euch beim cracken weitergeholfen und 2. Euch auf das nächste Tutor heiss gemacht ;). Wenn ihr noch irgendwelche Anmerkungen, Fragen oder ähnliches habt, dann e-mailt mir einfach!

    Grüsse gehen raus an die Kryptocrew, Fireball, ultraschall und an den Rest der TGC Crew